home *** CD-ROM | disk | FTP | other *** search
- From: Mike Ratledge
- To: All Msg #245, 03-Aug-88 12:45.00
- Subject: File sharing enabled test
-
- Someone asked the other day about an easy way to determine if file-sharing
- is enabled at program run-time. I use the following code in all of my
- Turbo C program to do just that:
-
- #define TRUE 1
- #define FALSE 0
-
- int sharing;
-
-
- main (int argc, char *argv[])
-
- {
- sharing = is_sharing(argv[0]);
- .
- .
- .
- if (sharing)
- {
- /* open file in shared mode */
- ...
- }
- else
- {
- /* use "normal" open */
- ...
- }
- }
-
-
- int is_sharing(char *arg)
-
- {
- FILE *exe;
-
- if (_osmajor < 3)
- return(FALSE);
- exe = fopen(arg, "rb");
- ii = lock(fileno(exe), 0l, 500l);
- if (ii != -1)
- {
- ii = unlock(fileno(exe), 0l, 500l);
- fclose(exe);
- return(TRUE);
- }
- fclose(exe);
- return(FALSE);
- }
-
- What does this code do? First - it checks to make sure it's running under
- DOS 3.0+ - if not - no sharing. Next - it opens the program itself (the
- .EXE file) by using "argv[0]", which points to the actual program name
- complete with the path under DOS 3.0 or later. It then attempts to lock
- the first 500 bytes of the program on disk, and if successful (i.e. return
- != -1) it unlocks the same bytes and closes the file (actually - the unlock
- is superfluous, since closing the file releases all locks) and returns the
- "TRUE" result. If it fails - it closes the .EXE file and returns FALSE.
- Note that this does not depend on opening a file in shared mode to test it.
-
- Note that this code must be modified slightly to be useful for MicroSoft
- C, since they use the "locking" procedure for both lock & unlock. You
- also have to "rewind" before the unlock, since M/S C works from the
- current file-pointer forward. I could post both - but I'm sure all you
- C-jockeys out there know what I'm talking about if it concerns you (i.e.
- you're using M/S C instead of Turbo). I also have this coded in Turbo
- Pascal if anyone needs it...
-